home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / kernel / mach / ds3100.md / machTypes.h < prev    next >
C/C++ Source or Header  |  1992-12-18  |  4KB  |  132 lines

  1. /*
  2.  * machTypes.h --
  3.  *
  4.  *         Exported structures for the mach module.
  5.  *
  6.  *    Copyright (C) 1989 Digital Equipment Corporation.
  7.  *    Permission to use, copy, modify, and distribute this software and
  8.  *    its documentation for any purpose and without fee is hereby granted,
  9.  *    provided that the above copyright notice appears in all copies.
  10.  *    Digital Equipment Corporation makes no representations about the
  11.  *    suitability of this software for any purpose.  It is provided "as is"
  12.  *    without express or implied warranty.
  13.  *
  14.  * $Header: /cdrom/src/kernel/Cvsroot/kernel/mach/ds3100.md/machTypes.h,v 1.2 91/08/09 15:19:54 shirriff Exp $ SPRITE (Berkeley)
  15.  */
  16.  
  17. #ifndef _MACHTYPES
  18. #define _MACHTYPES
  19.  
  20. #ifdef KERNEL
  21. #include "machConst.h"
  22. #include "user/fmt.h"
  23. #else
  24. #include <kernel/machConst.h>
  25. #include <fmt.h>
  26. #endif
  27.  
  28. /*
  29.  * The state of each processor: user mode or kernel mode.
  30.  */
  31. typedef enum {
  32.     MACH_USER,
  33.     MACH_KERNEL
  34. } Mach_ProcessorStates;
  35.  
  36. /*
  37.  * State for each process.
  38.  *
  39.  * IMPORTANT NOTE: If the order or size of fields in these structures change
  40.  *           then the constants which give the offsets must be
  41.  *           changed in "machConst.h".
  42.  */
  43.  
  44. /*
  45.  * The register state of a user process which is passed to debuggers.
  46.  */
  47. typedef struct {
  48.     Address        pc;            /* The program counter. */
  49.     unsigned        regs[MACH_NUM_GPRS];    /* General purpose registers.*/
  50.     unsigned        fpRegs[MACH_NUM_FPRS];    /* The floating point
  51.                          * registers. */
  52.     unsigned        fpStatusReg;        /* The floating point status
  53.                          * register. */
  54.     unsigned        mflo, mfhi;        /* Multiply lo and hi
  55.                          * registers. */
  56. } Mach_RegState;
  57.  
  58. /*
  59.  * The user state for a process.
  60.  */
  61. typedef struct {
  62.     Mach_RegState    regState;        /* State of a process after
  63.                          * a trap. */
  64.     int            unixRetVal;        /* Return value from a
  65.                          * UNIX system call. */
  66.     int            savedV0, savedA3;    /* For restarting calls. */
  67. } Mach_UserState;
  68.  
  69. /*
  70.  * The kernel and user state for a process.
  71.  */
  72. typedef struct Mach_State {
  73.     Mach_UserState    userState;        /* User state for a process. */
  74.     Mach_RegState    switchRegState;        /* The state to save on a
  75.                          * context switch. */
  76.     Address        kernStackStart;        /* Address of the beginning of
  77.                          * the kernel stack. */
  78.     Address        kernStackEnd;        /* Address of the end of the
  79.                          * the kernel stack. */
  80.     unsigned        sstepInst;        /* The instruction that we
  81.                          * replaced to do a single
  82.                          * step. */
  83.     unsigned        tlbHighEntry;        /* The TLB high entry value
  84.                          * for the first stack page. */
  85.     unsigned        tlbLowEntries[MACH_KERN_STACK_PAGES - 1];
  86.                             /* The TLB low entry values
  87.                          * for the mapped stack
  88.                          * pages. */
  89. } Mach_State;
  90.  
  91. /*
  92.  * The machine dependent signal structure.
  93.  */
  94. typedef struct {
  95.     int              break1Inst;    /* The instruction that is
  96.                      * executed upon return. */
  97.     Mach_UserState    userState;    /* The user process machine state
  98.                      * info. */
  99.     unsigned        fpRegs[MACH_NUM_FPRS];    /* The floating point
  100.                          * registers. */
  101.     unsigned        fpStatusReg;        /* The floating point status
  102.                          * register. */
  103. } Mach_SigContext;
  104.  
  105. /*
  106.  * The structure used by the debugger to hold the machine state.
  107.  */
  108. typedef struct {
  109.     int        regs[MACH_NUM_GPRS];
  110.     int        fpRegs[MACH_NUM_FPRS];
  111.     unsigned    sig[32];
  112.     unsigned    excPC;
  113.     unsigned    causeReg;
  114.     unsigned    multHi;
  115.     unsigned    multLo;
  116.     unsigned    fpCSR;
  117.     unsigned    fpEIR;
  118.     unsigned    trapCause;
  119.     unsigned    trapInfo;
  120.     unsigned    tlbIndex;
  121.     unsigned    tlbRandom;
  122.     unsigned    tlbLow;
  123.     unsigned    tlbContext;
  124.     unsigned    badVaddr;
  125.     unsigned    tlbHi;
  126.     unsigned    statusReg;
  127. } Mach_DebugState;
  128.  
  129.  
  130.  
  131. #endif /* _MACHTYPES */
  132.